home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 February: Technology Seed / Mac Tech Seed Feb '97.toast / OpenDoc 1.2b2c1 / Implementation / Utilities / UseLib.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-02-13  |  1.4 KB  |  85 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        UseLib.cpp
  3.  
  4.     Contains:    Utility class for loading & unloading libraries on-demand
  5.  
  6.     Owned by:    Chris Linn
  7.  
  8.     Copyright:    © 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <1>     10/4/96    CSL        first checked in
  13. */
  14.  
  15. #ifndef __CODEFRAGMENTS__
  16. #include <CodeFragments.h>
  17. #endif
  18.  
  19. #ifndef _EXCEPT_
  20. #include "Except.h"
  21. #endif
  22.  
  23. #ifndef _ODDEBUG_
  24. #include "ODDebug.h"
  25. #endif
  26.  
  27. #ifndef _PASCLSTR_
  28. #include "PasclStr.h"
  29. #endif
  30.  
  31. #ifndef _USELIB_
  32. #include "UseLib.h"
  33. #endif
  34.  
  35. CUsingLibrary::CUsingLibrary( Str63 libName )
  36. {
  37.     Ptr     main;
  38.     Str255    errName;
  39.  
  40.     fConnectionID = 0;
  41.     fErr = noErr;
  42.  
  43.     fErr = GetSharedLibrary( libName, kCurrentCFragArch, 1, &fConnectionID,
  44.             &main, errName );
  45. #if ODDebug
  46.     if ( fErr != noErr )
  47.     {
  48.         PascalToCString( errName );
  49.         WARN( "GetSharedLibrary returned error %d '%s'", fErr, errName );
  50.     }
  51. #endif
  52. }
  53.  
  54. Ptr CUsingLibrary::GetEntry( Str255 entryName )
  55. {
  56.     Ptr     entry = NULL;
  57.  
  58.     if ( fErr != noErr )
  59.         THROW( fErr );
  60.  
  61.     CFragSymbolClass symClass;
  62.     fErr = FindSymbol( fConnectionID, entryName, &entry, &symClass );
  63.     if ( fErr == noErr )
  64.         WASSERT( symClass == kTVectorCFragSymbol );
  65.     else
  66.     {
  67.         WARN( "Didn't find symbol %s", entryName );
  68.         entry = NULL;
  69.         THROW( fErr );
  70.     }
  71.     return entry;
  72. }
  73.  
  74. CUsingLibrary::~CUsingLibrary()
  75. {
  76.     if ( fConnectionID != 0 )
  77.     {
  78.         fErr = CloseConnection( &fConnectionID );
  79.         fConnectionID = 0;
  80.         WASSERT( fErr == noErr );
  81.     }
  82. }
  83.  
  84.  
  85.